Java.time প্যাকেজ জাভা 8 এ একটি নতুন এবং শক্তিশালী Date and Time API হিসেবে পরিচিত। এটি মূলত পুরোনো java.util.Date, java.util.Calendar এবং java.text.SimpleDateFormat ক্লাসগুলোর সমস্যাগুলোর সমাধান দিতে তৈরি করা হয়েছে। পুরোনো Date/Time API গুলোর অনেক সীমাবদ্ধতা ছিল, যেমন:
- Mutable Objects: পুরোনো Date ক্লাসটি mutable ছিল, যার ফলে তা সংশোধনযোগ্য ছিল এবং এর মান পরিবর্তন করতে অনেক জটিলতা সৃষ্টি হতো।
- Thread Safety: পুরোনো ক্লাসগুলোর মধ্যে থ্রেড সেফটি ছিল না, যার কারণে মাল্টি-থ্রেডিং এনভায়রনমেন্টে সমস্যা হতে পারতো।
- Complexity: পুরোনো API গুলো ব্যবহার করার সময় অনেক জটিলতা থাকত এবং বিভিন্ন টাইমজোন বা বিভিন্ন ফরম্যাটে ডেটা কনভার্ট করা কঠিন ছিল।
Java 8 তে এইসব সমস্যার সমাধান দেওয়ার জন্য java.time প্যাকেজটি তৈরি করা হয়েছে। এটি immutable এবং thread-safe এবং বিভিন্ন Date/Time অ্যাপ্লিকেশন আরও সহজ এবং সোজা করার জন্য ডিজাইন করা হয়েছে।
Java 8 এ নতুন Date এবং Time API এর প্রধান বৈশিষ্ট্যগুলো:
- Immutable Objects:
- Immutable মানে একবার একটি অবজেক্ট তৈরি হওয়ার পর তার মান পরিবর্তন করা সম্ভব নয়। যেমন,
LocalDate,LocalTime,LocalDateTimeক্লাসগুলোর মান একবার সেট হলে তা পরিবর্তন করা যাবে না। এর ফলে ডেটা সুরক্ষিত থাকে এবং থ্রেড সেফিটি বাড়ে।
- Immutable মানে একবার একটি অবজেক্ট তৈরি হওয়ার পর তার মান পরিবর্তন করা সম্ভব নয়। যেমন,
- Thread Safety:
- Thread-safe মানে একই অবজেক্ট একাধিক থ্রেডের দ্বারা অ্যাক্সেস করা হলে তা সঠিকভাবে কাজ করবে। নতুন Date/Time API গুলো থ্রেড সেফ।
- Cleaner API:
- পুরোনো API গুলোর তুলনায় Java 8 এর
java.timeAPI অনেক পরিষ্কার এবং সহজ। এই API গুলোর মধ্যে কোনো ধরনের implicit conversions নেই, এবং সমস্ত ক্যালকুলেশনগুলো স্পষ্ট এবং নির্ভুল।
- পুরোনো API গুলোর তুলনায় Java 8 এর
- Time Zone Handling:
- Java 8 এর
java.timeপ্যাকেজে টাইমজোন হ্যান্ডলিং অনেক সহজ হয়েছে। এটিZonedDateTimeক্লাস ব্যবহার করে টাইমজোন নির্ধারণ করতে সাহায্য করে এবংOffsetDateTimeক্লাসের মাধ্যমে আউটপুট সেট করতে পারে।
- Java 8 এর
- ISO-8601 Standard:
- Java 8 এর নতুন Date and Time API গুলি ISO-8601 স্ট্যান্ডার্ডের উপর ভিত্তি করে তৈরি হয়েছে, যা একটি আন্তর্জাতিকভাবে গ্রহণযোগ্য এবং সাধারণ টাইম ফরম্যাট।
- Better Support for Durations and Periods:
- পুরোনো API তে সময়ের পার্থক্য (duration) বা সময়সীমা (period) হিসাব করা ছিল কষ্টসাধ্য। Java 8 এ
DurationএবংPeriodক্লাসের মাধ্যমে সময়ের পার্থক্য সহজে বের করা সম্ভব হয়েছে।
- পুরোনো API তে সময়ের পার্থক্য (duration) বা সময়সীমা (period) হিসাব করা ছিল কষ্টসাধ্য। Java 8 এ
Java 8 Date and Time API - প্রধান ক্লাসগুলো:
LocalDate:
- এই ক্লাসটি date (দিন, মাস, বছর) পরিচালনা করতে ব্যবহৃত হয়, তবে এর সাথে কোনো সময় বা টাইমজোন সম্পর্কিত তথ্য থাকে না।
Example:
import java.time.LocalDate; public class LocalDateExample { public static void main(String[] args) { LocalDate date = LocalDate.now(); // Current date System.out.println("Current Date: " + date); LocalDate specificDate = LocalDate.of(2024, 12, 23); // Specific date System.out.println("Specific Date: " + specificDate); } }Output:
Current Date: 2024-12-23 Specific Date: 2024-12-23LocalTime:
- এটি শুধুমাত্র time (ঘণ্টা, মিনিট, সেকেন্ড) পরিচালনা করে, কোনো তারিখ বা টাইমজোন সম্পর্কিত তথ্য থাকে না।
Example:
import java.time.LocalTime; public class LocalTimeExample { public static void main(String[] args) { LocalTime time = LocalTime.now(); // Current time System.out.println("Current Time: " + time); LocalTime specificTime = LocalTime.of(14, 30); // Specific time System.out.println("Specific Time: " + specificTime); } }Output:
Current Time: 14:30:00.123456 Specific Time: 14:30LocalDateTime:
- এটি LocalDate এবং LocalTime এর সমন্বয়ে তৈরি, অর্থাৎ এটি তারিখ এবং সময় উভয়কে একত্রে হ্যান্ডল করে। তবে টাইমজোন সম্পর্কিত কোনো তথ্য থাকে না।
Example:
import java.time.LocalDateTime; public class LocalDateTimeExample { public static void main(String[] args) { LocalDateTime dateTime = LocalDateTime.now(); // Current date and time System.out.println("Current DateTime: " + dateTime); LocalDateTime specificDateTime = LocalDateTime.of(2024, 12, 23, 14, 30); // Specific date and time System.out.println("Specific DateTime: " + specificDateTime); } }Output:
Current DateTime: 2024-12-23T14:30:00.123456 Specific DateTime: 2024-12-23T14:30ZonedDateTime:
- এটি LocalDateTime এর মতই, তবে এর সাথে টাইমজোনও থাকে, এবং এই ক্লাসটি টাইমজোন সম্পর্কিত কার্যক্রমের জন্য ব্যবহৃত হয়।
Example:
import java.time.ZonedDateTime; import java.time.ZoneId; public class ZonedDateTimeExample { public static void main(String[] args) { ZonedDateTime zonedDateTime = ZonedDateTime.now(); // Current date, time, and time zone System.out.println("Current ZonedDateTime: " + zonedDateTime); ZonedDateTime specificZonedDateTime = ZonedDateTime.of(2024, 12, 23, 14, 30, 0, 0, ZoneId.of("America/New_York")); System.out.println("Specific ZonedDateTime: " + specificZonedDateTime); } }Output:
Current ZonedDateTime: 2024-12-23T14:30:00.123456-05:00[America/New_York] Specific ZonedDateTime: 2024-12-23T14:30-05:00[America/New_York]Duration and Period:
- Duration: এটি সময়ের পার্থক্য (time-based) গণনা করতে ব্যবহৃত হয়।
- Period: এটি তারিখের পার্থক্য (date-based) গণনা করতে ব্যবহৃত হয়।
Example:
import java.time.*; public class DurationAndPeriodExample { public static void main(String[] args) { // Duration Duration duration = Duration.ofHours(5); System.out.println("Duration (in hours): " + duration.toHours()); // Period LocalDate startDate = LocalDate.of(2024, 1, 1); LocalDate endDate = LocalDate.of(2024, 12, 31); Period period = Period.between(startDate, endDate); System.out.println("Period (in days): " + period.getDays()); } }Output:
Duration (in hours): 5 Period (in days): 365
Java 8 Date and Time API এর সুবিধা:
- Immutable Objects:
java.timeপ্যাকেজের সকল অবজেক্টই immutable, তাই ডেটা নিরাপদ থাকে এবং সঠিকভাবে থ্রেড সেফ থাকে। - Thread Safe: এটি thread-safe এবং synchronized নয়, যা মাল্টি-থ্রেডেড এনভায়রনমেন্টে ভালো পারফরম্যান্স নিশ্চিত করে।
- Better Time Zone Handling: এটি
ZonedDateTimeএবংOffsetDateTimeক্লাসের মাধ্যমে টাইমজোন হ্যান্ডলিং সহজ করে দিয়েছে। - Cleaner API: নতুন API গুলো সহজ এবং পরিষ্কার, যা কোডের রক্ষণাবেক্ষণ এবং বুঝতে সাহায্য করে।
- Supports ISO-8601 Standard: ISO-8601 স্ট্যান্ডার্ডের সাথে সামঞ্জস্যপূর্ণ হওয়ায় এটি আন্তর্জাতিক পর্যায়ে ব্যবহারযোগ্য।
Java 8 এর নতুন java.time প্যাকেজটি date এবং time সম্পর্কিত সমস্যাগুলোর সমাধান দেয় এবং immutable, thread-safe, এবং clean API এর মাধ্যমে সময় ও তারিখ ব্যবস্থাপনা সহজ করে তোলে। এই API গুলি ব্যবহার করে আপনি জটিল টাইমজোন, তারিখ, সময়, এবং ডিউরেশন সম্পর্কিত কাজ সহজে করতে পারেন।
Read more